<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
</head>

<body>
  <script>
    // 函数（方法）

    // 函数声明(形参)
    // sayHi("小hua", 12, 15, 16)

    // function sayHi(name, age) {
    //   console.log('大家好啊😬，我叫' + name + '我今年' + age + '岁了');
    // }
    // 函数调用（传参【实参】）
    // sayHi("小明", 18)

    // 函数表达式
    // fn1()
    // var fn1 = function () {
    //   console.log(666);
    // }

    // 函数作用域（局部作用域）

    // var aa = 666
    // var bb = 888

    // function fn2() {
    //   // 局部变量（只能在该函数里面被访问到）就近原则
    //   var bb = 999
    //   console.log(aa);
    //   console.log(bb);
    // }
    // fn2()
    // console.log(bb);

    // 词法作用域：函数是在定义他的作用域中运行，而不是在执行他们的作用域中运行
    // var cc = 111

    // function fn3() {
    //   console.log(cc);
    // }
    // function fn4() {
    //   var cc = 222
    //   fn3()
    // }
    // fn4()

    // function fn5(fun1) {
    //   fun1(function () {
    //     console.log(666);
    //   })
    // }

    // var fn6 = function (fun2) {
    //   fun2()
    // }
    // fn5(fn6)


    // function fn7(a, b, c) {
    //   console.log(arguments[0], arguments[6]);
    // }
    // fn7(1, 2, 3, 4, 5, 6, 7)

    // 求n!   n*(n-1)!

    // 1 1 2 3 5
    // function jie(n) {
    //   if (n <= 1) return 1
    //   return n * jie(n - 1)
    // }
    // console.log(jie(3));



    // var sum = 0;
    // for (var i = 1; i <= 10; i++) {
    //   sum += jie(i);
    // }
    // console.log(sum);



    // function fn8(a, b) {
    //   return a + b
    // }
    // var sum = fn8(1, 2);
    // console.log(sum);

    // document.write(111 +' ')
    // document.write('<br>')
    // document.write(222)

    // arguments.callee

    // function test(name, age){
    //   // console.log(arguments.length);
    // }

    // test('lisi', 23);

    // console.log(test.length);

    // function factorial(n) {
    //   if (n <= 1) return 1
    //   return n * factorial(n - 1)
    // }

    // function factorial(n) {
    //   if (n <= 1) return 1
    //   return n * arguments.callee(n - 1)
    // }

    // console.log(factorial(4));

    // function test(){
    //   console.log('haha');
    // }

    // var test = new Function("console.log('haha');");

    // test();

    // function test2(){
    //   return function(){
    //     console.log('hehe');
    //   };
    // }

    // test2()();

    // fn();

    // function test(a){
    //   a();
    // }

    // test(function(){
    //   console.log('hoho');
    // });

      // 函数立即调用

      // (function(){
      //   console.log('haha');
      // })()
      
      (function(){
        var name = 'aa'
      })();


      (function(){
        var name = 'bb'
      })();

  </script>
</body>

</html>